package me.wangxuan.pat;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import org.fife.ui.rtextarea.RTextScrollPane;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;

import javax.swing.*;
import java.awt.*;

public class RSyntaxTextAreaFastJsonFormatter {

    public static void main(String[] args) {
        // 创建一个 RSyntaxTextArea 实例
        RSyntaxTextArea textArea = new RSyntaxTextArea(20, 60);
        textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JSON);
        textArea.setCodeFoldingEnabled(false);//关闭折叠

        // 创建一个滚动面板
        RTextScrollPane scrollPane = new RTextScrollPane(textArea);
        scrollPane.setLineNumbersEnabled(false);//关闭行号显示
        // 创建主窗口
        JFrame frame = new JFrame("RSyntaxTextArea FastJSON Formatter Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setVisible(true);

        // 添加一个按钮来触发 JSON 格式化
        JButton formatButton = new JButton("格式化 JSON");
        formatButton.addActionListener(e -> {
            try {
                // 获取用户输入的 JSON 字符串
                String inputJson = textArea.getText();
                String formattedJson = inputJson;
                if(JSON.isValidObject(inputJson)) {
                	 // 尝试解析 JSON 字符串
                    JSONObject jsonObject = JSON.parseObject(inputJson);
                    // 使用 fastjson 的 toJSONString() 方法格式化 JSON 数据
                    formattedJson = JSON.toJSONString(jsonObject, true);
                }else if(JSON.isValidArray(inputJson)) {
                	 formattedJson = JSON.toJSONString(JSON.parseArray(inputJson),true);
                }

                // 将格式化后的 JSON 设置回文本区域
                textArea.setText(formattedJson);
            } catch (Exception ex) {
                ex.printStackTrace();
                JOptionPane.showMessageDialog(frame, "格式化失败: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
            }
        });
        frame.add(formatButton, BorderLayout.SOUTH);
    }
}
